/**
 * @author 木人心
 * @version 1.0.0
 */
import { LngLatParamType, Point } from './type'

/**
 * 生成setFitView所需的覆盖物
 * @param _AMap
 * @param points
 */
export function createFitViewOverlays (_AMap: typeof AMap, points: LngLatParamType[]) {
  const min = { lng: Infinity, lat: Infinity }
  const max = { lng: -Infinity, lat: -Infinity }
  const getLngLat = createGetPoint(points[0])
  for (let i = 0, len = points.length; i < len; i++) {
    const lngLat = getLngLat(points[i])
    if (lngLat.lng < min.lng) min.lng = lngLat.lng
    if (lngLat.lat < min.lat) min.lat = lngLat.lat
    if (lngLat.lng > max.lng) max.lng = lngLat.lng
    if (lngLat.lat > max.lat) max.lat = lngLat.lat
  }
  return [
    new _AMap.Marker({ position: [min.lng, min.lat] }),
    new _AMap.Marker({ position: [max.lng, max.lat] })
  ]
}

/**
 * 生成一个LngLatParamType类型转Point类型的函数
 * @param lngLatParam 传入一个LngLatParamType用于示例处理方式
 */
function _createGetPoint (lngLatParam) {
  if (lngLatParam.lnglat) {
    return (point) => ({ lng: point.lnglat[0], lat: point.lnglat[1] })
  } else if (Array.isArray(lngLatParam)) {
    return (point) => ({ lng: point[0], lat: point[1] })
  } else {
    return (point) => point
  }
}
const createGetPoint = _createGetPoint as { (lngLatParam: LngLatParamType): { (lngLatParam: LngLatParamType): Point } }
